The current enterprise and/or consumer network-based service landscape is a kaleidoscope of various service functions (such as firewalls, Deep Packet Inspection (DPI), Wide Area Network (WAN) and application acceleration, server load balancers, Transmission Control Protocol (TCP) optimizers, etc.). These various service functions are commonly achieved through services provided by heterogeneous service providers. When a customer wants to avail just one specific service, the current client-server model works perfectly fine as the client can be directed to a server and after receiving the service, that particular transaction ends. With the advent of new services, there are new use cases. These services sometimes work in conjunction with each other and as well as independent. New use cases have arisen where services need to be chained, so-called service function chaining, i.e., while availing service A, there is a need to go through service Z, Y, X . . . , etc. Previously such services were provided by appliances hosted within an enterprise, and enterprise administrators could configure the service function chain manually by configuring their network devices physically or through a primitive Software Defined Networking (SDN)-controlled solution where network topology could be modified to support different functions. For consumers or mobile enterprise users, there are typically no savvy network administrators and those services would not be hosted in the homes, so it is not possible to configure such a chain.
In enterprises as well, administrators cannot configure a service in a chain by configuring their network because more and more services are moving to the cloud, and, if a service does not provide a way to configure a chain, then it is not possible to configure such a service. For any service to participate in the service chaining, they need to know the service before it, service after it, user credentials, and type of service needed. In typical cloud-based services, a mechanism to authenticate and authorize users is configured for services, but there is not an infrastructure where the admin/end-user can pick the service before and after. Even if it were possible to configure such service chaining, it is quite cumbersome to configure and maintain as each service may expose the configuration differently and in varied capability.
There is a need for a new service discovery and delivery architecture whereby end users do not have to configure the service chain on each service and each service does not have to implement complex service chaining attributes.